#include "ST_IO.h"

void RelayInit(void)
{
    GPIO_InitTypeDef GPIO_InitStructure;
    
    // Enable GPIOE clock
    RCC_AHB1PeriphClockCmd(RELAY1_GPIO_CLK, ENABLE);
    
    // Configure Relay1 (PE2)
    GPIO_InitStructure.GPIO_Pin = RELAY1_GPIO_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(RELAY1_GPIO_PORT, &GPIO_InitStructure);
    
    // Configure Relay2 (PE3)
    GPIO_InitStructure.GPIO_Pin = RELAY2_GPIO_PIN;
    GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT;
    GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
    GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
    GPIO_InitStructure.GPIO_Speed = GPIO_Speed_2MHz;
    GPIO_Init(RELAY2_GPIO_PORT, &GPIO_InitStructure);
    
    // Set default state to OFF (low level)
    SetRelay1Off();
    SetRelay2Off();
}

void SetRelay1On(void)
{
    GPIO_SetBits(RELAY1_GPIO_PORT, RELAY1_GPIO_PIN);
}

void SetRelay1Off(void)
{
    GPIO_ResetBits(RELAY1_GPIO_PORT, RELAY1_GPIO_PIN);
}

void SetRelay1Toggle(void)
{
    GPIO_WriteBit(RELAY1_GPIO_PORT, RELAY1_GPIO_PIN, 
                  (BitAction)!GPIO_ReadOutputDataBit(RELAY1_GPIO_PORT, RELAY1_GPIO_PIN));
}

void SetRelay2On(void)
{
    GPIO_SetBits(RELAY2_GPIO_PORT, RELAY2_GPIO_PIN);
}

void SetRelay2Off(void)
{
    GPIO_ResetBits(RELAY2_GPIO_PORT, RELAY2_GPIO_PIN);
}

void SetRelay2Toggle(void)
{
    GPIO_WriteBit(RELAY2_GPIO_PORT, RELAY2_GPIO_PIN, 
                  (BitAction)!GPIO_ReadOutputDataBit(RELAY2_GPIO_PORT, RELAY2_GPIO_PIN));
} 